/**
 * File : RedisCluster.java <br/>
 * Author : lenovo <br/>
 * Version : 1.1 <br/>
 * Date : 2017年2月13日 <br/>
 * Modify : <br/>
 * Package Name : com.zhongpin.zz.redis.jfinal.plugin.cluster <br/>
 * Project Name : zp-zz-redis <br/>
 * Description : <br/>
 * 
 */

package com.redis.jfinal.plugin.cluster;

import java.util.concurrent.ConcurrentHashMap;

/**
 * ClassName : RedisCluster <br/>
 * Function : Redis 集群环境相关. <br/>
 * Reason : Redis 集群环境相关. <br/>
 * Date : 2017年2月13日 上午10:58:45 <br/>
 * 
 * @author : alexgaoyh <br/>
 * @version : 1.1 <br/>
 * @since : JDK 1.6 <br/>
 * @see
 */

public class RedisCluster {

	// 主集群缓存
	static ZpJedisCluster mainCache = null;
	
	// 集群缓存集合
	private static final ConcurrentHashMap<String, ZpJedisCluster> cacheMap = new ConcurrentHashMap<String, ZpJedisCluster>();
	
	/**
	 * 插入新集群缓存
	 * 
	 * @param cacheName 集群缓存名称
	 * 
	 * @param cache 集群缓存
	 */
	public static void addCache(String cacheName, ZpJedisCluster cache) {
		
		if (cache == null)
			throw new IllegalArgumentException("cache can not be null");
		if (cacheMap.containsKey(cacheName))
			throw new IllegalArgumentException("The cache name already exists");
		
		cacheMap.put(cacheName, cache);
		if (mainCache == null)
			mainCache = cache;
		
	}
	
	/**
	 * 
	 * 删除集群缓存
	 * 
	 * @param cacheName 集群缓存名称
	 * 
	 * @return JedisCluster 
	 * 
	 */
	public static ZpJedisCluster removeCache(String cacheName) {
		
		return cacheMap.remove(cacheName);
		
	}
	
	/**
	 * 提供一个设置设置主集群缓存 mainCache 的机会，否则第一个被初始化的 Cache 将成为 mainCache
	 */
	public static void setMainCache(String cacheName) {
		
		if (cacheName == null || cacheName.equals(""))
			throw new IllegalArgumentException("cacheName can not be blank");
		cacheName = cacheName.trim();
		ZpJedisCluster cache = cacheMap.get(cacheName);
		if (cache == null)
			throw new IllegalArgumentException("the cache not exists: " + cacheName);
		
		RedisCluster.mainCache = cache;
		
	}
	
	/**
	 * 
	 * 使用主集群缓存
	 * 
	 * @return JedisCluster
	 */
	public static ZpJedisCluster use() {
		return mainCache;
	}
	
	/**
	 * 
	 * 使用指定名称集群缓存
	 * 
	 * @param cacheName 集群缓存名称
	 * 
	 * @return JedisCluster
	 */
	public static ZpJedisCluster use(String cacheName) {
		return cacheMap.get(cacheName);
	}
	
}